package adminModel

import (
	"time"

	"gorm.io/gorm"
)

type User struct {
	// 基础字段
	ID        uint           `gorm:"primaryKey" json:"id"`
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`

	// 用户名
	Username string `gorm:"size:50;not null;uniqueIndex:idx_username" json:"username"`
	// 手机号
	Phone string `gorm:"size:20;not null;uniqueIndex:idx_phone" json:"phone"`
	// 邮箱
	Email string `gorm:"size:100;uniqueIndex:idx_email" json:"email"`
	// 密码
	Password string `gorm:"size:100;not null" json:"-"`
	// 昵称
	Nickname string `gorm:"size:50;default:''" json:"nickname"`
	// 头像
	Avatar string `gorm:"size:255;default:''" json:"avatar"`
	// 性别
	Gender uint8 `gorm:"type:tinyint;default:0" json:"gender"`
	// 生日
	Birthday *time.Time `gorm:"type:date" json:"birthday,omitempty"`
	// 状态
	Status uint8 `gorm:"type:tinyint;not null;default:1;index:idx_status" json:"status"`
	// 备注
	Remark string `gorm:"size:500;default:''" json:"remark,omitempty"`

	// 关联关系
	Roles       []Role        `gorm:"many2many:admin_user_role;" json:"roles,omitempty"`
	Permissions []Permissions `gorm:"many2many:admin_permissions;" json:"permissions,omitempty"`
}

// TableName 方法用于定义数据库表的名称
// 这是一个 Member 结构体的指针方法，返回字符串类型的表名
func (*User) TableName() string {
	return "admin_user" // 返回数据库中实际的表名 "admin_user"
}
